


package kosta.model.vo;

import java.sql.SQLException;

/**
 * 페이징 처리를 위한 비즈니스 클래스
 * @author kosta
 * PagintBean method 구현 순서
 * 
 *	getTotalPage()
	getTotalPageGroup()
	getNowPageGroup()
	getStartPageOfPageGroup()
	getEndPageOfPageGroup()
	isPreviousPageGroup()
	boolean isNextPageGroup()	

 */

public class PagingBean {
	/**현재 페이지
	 * 페이지당 보여줄 게시물 수 
	 * 페이지 그룹당 페이지 수
	 * 	현재 db에 저장된 총 게시물 수
	 * 검색할 아이디 keyword,	 * 정렬기준 컬럼
	 */
	private int	 nowPage=1;
	private int	 contentNumberPerPage=CommonConstants.CONTENT_NUMBER_PER_PAGE;
	private int	 pageNumberPerPageGroup=CommonConstants.PAGE_NUMBER_PER_PAGEGROUP;
	private int  totalContents;
	private String keyword, flag;
	private int smallClassNo;
	/**
	 * db로부터 전체 게시물 수를 받아오고, 현재 페이지는 client 로부터 받아 생성
	 * 총 게시물수와 현재 페이지 정보를 할당
	 * @param totalContents
	 * @param nowPage
	 */
	public PagingBean(int totalContents, int nowPage) {
		super();
		this.totalContents = totalContents;
		this.nowPage = nowPage;		
	}	
	
	
	public PagingBean( int totalContents,int nowPage,String keyword,
			String flag) {
		super();
		this.nowPage = nowPage;
		this.totalContents = totalContents;
		this.keyword = keyword;
		this.flag = flag;
	}
	
	
	public PagingBean( int totalContents, int nowPage, String keyword,
			String flag, int smallClassNo) {
		super();
		this.nowPage = nowPage;
		this.totalContents = totalContents;
		this.keyword = keyword;
		this.flag = flag;
		this.smallClassNo = smallClassNo;
	}


	/**
	 * db로부터 게시물 수 받아오고 , 첫페이지로 생성
	 * @param totalContents
	 */
	public PagingBean(int totalContents) {
		super();
		this.totalContents = totalContents;
	}
	
	/**
	 * 현재 페이지 리턴
	 * @return
	 */
	public int getNowPage(){
		return nowPage;
	}


	/**
	 * 총 페이지 수를 return한다.
	1. 전체 데이터(게시물) % 한 페이지에 보여줄 데이터 개수 
	=> 0 이면 둘을 / 값이 총 페이지 수
	2. 전체 데이터(게시물) % 한 페이지에 보여줄 데이터 개수 
	=> 0보다 크면 둘을 / 값에 +1을 한 값이 총 페이지 수
	게시물수 1 2 3 4 5 6 7 8 9 10 11 12
	1페이지 1~5
	2페이지 6~10
	3페이지 11 
	ex) 게시물 32 개 , 페이지당 게시물수 5개 
	-> 7 페이지
	 * @return
	 * @throws SQLException
	 */
	public int getTotalPage(){
		int totalPage=0;		
		int nmg = totalContents%contentNumberPerPage;
		if(nmg==0){
			totalPage=totalContents/contentNumberPerPage;
		}else{
			totalPage=totalContents/contentNumberPerPage+1;
		}
		return totalPage;
	}
	/**
	 * 총 페이지 그룹의 수를 return한다.
	1. 총 페이지수 % Page Group 내 Page 수. 
	=> 0 이면 둘을 / 값이 총 페이지 수
	2. 총 페이지수 % Page Group 내 Page 수. 
	=> 0보다 크면 둘을 / 값에 +1을 한 값이 총 페이지 수
	ex) 총 게시물 수 23 개 
	총 페이지 ? 총 페이지 그룹수 ? 
	페이지 1 2 3 4 5
	페이지그룹 1234(1그룹) 5(2그룹) 
	 * @return
	 */
	public int getTotalPageGroup(){
		int totalPage = getTotalPage();
		int totalPageGroup=0;
		int nmg = totalPage%this.pageNumberPerPageGroup;
		if(nmg==0){
			totalPageGroup=totalPage/this.pageNumberPerPageGroup;
		}else{
			totalPageGroup=totalPage/this.pageNumberPerPageGroup+1;
		}
		return totalPageGroup;
	}
	
	/**
	 * 현재 페이지가 속한 페이지 그룹 번호(몇 번째 페이지 그룹인지) 을 return 하는 메소드 
	1. 현재 페이지 % Page Group 내 Page 수 => 0 이면 
	둘을 / 값이 현재 페이지 그룹. 
	2. 현재 페이지 % Page Group 내 Page 수 => 0 크면 
	둘을 / 값에 +1을 한 값이 현재 페이지 그룹
	1 2 3 4 5 6 7 8 9 10
	 * @return
	 */
	public int getNowPageGroup(){
		int nmg = this.nowPage%this.pageNumberPerPageGroup;
		int nowPageGroup=0;
		if(nmg==0){
			nowPageGroup=this.nowPage/this.pageNumberPerPageGroup;
		}else{
			nowPageGroup=this.nowPage/this.pageNumberPerPageGroup+1;
		}
		return nowPageGroup;
	}
	
	/**
	 * 현재 페이지가 속한 페이지 그룹의 시작 페이지 번호를 return 한다.
	Page Group 내 Page 수*(현재 페이지 그룹 -1) + 1을 한 값이 첫 페이지이다.
	(페이지 그룹*페이지 그룹 개수 이 그 그룹의 마지막 번호이므로) 
	페이지 그룹 
	1 2 3 4 -> 5 6 7 8 -> 9 10 
	 * @return
	 */
	public int getStartPageOfPageGroup(){
		int nowPageGroup=getNowPageGroup();
		int startPage = this.pageNumberPerPageGroup*(nowPageGroup-1)+1;
		return startPage;
	}
	
	/**
	 * 현재 페이지가 속한 페이지 그룹의 마지막 페이지 번호를 return 한다.
	1. 현재 페이지 그룹 * 페이지 그룹 개수 가 마지막 번호이다. 
	2. 그 그룹의 마지막 페이지 번호가 전체 페이지의 마지막 페이지 번호보다 
	큰 경우는 전체 페이지의 마지막 번호를 return 한다.
	1 2 3 4 -> 5 6 7 8 -> 9 10
	 * @return
	 */
	public int getEndPageOfPageGroup(){
		int nowPageGroup=getNowPageGroup();
		int endPageofPageGroup = nowPageGroup*this.pageNumberPerPageGroup;
		if(getTotalPage()<endPageofPageGroup){
			endPageofPageGroup=getTotalPage();
		}
		return endPageofPageGroup;		
	}
	/**
	 * 이전 페이지 그룹이 있는지 체크하는 메서드 
	현재 페이지가 속한 페이지 그룹이 1보다 크면 true
	ex ) 페이지 1 2 3 4 / 5 6 7 8 / 9 10 
	1 2 3 group
	 * @return
	 */
	public boolean isPreviousPageGroup(){
		boolean flag = false;
		if(getNowPageGroup()>1){
			flag=true;
		}
		return flag;
	}
	
	/**
	 * 다음 페이지 그룹이 있는지 체크하는 메서드 
	현재 페이지 그룹이 마지막 페이지 그룹(
	마지막 페이지 그룹 == 총 페이지 그룹 수) 보다 작으면 true
	* ex ) 페이지 
	1 2 3 4 / 5 6 7 8 / 9 10 
	1 2 3 group
	 * @return
	 */
	public boolean isNextPageGroup(){
		boolean flag=false;
		if(getNowPageGroup()<getTotalPageGroup()){
			flag=true;
		}
		return flag;
	}


	public int getTotalContents() {
		return totalContents;
	}


	public String getKeyword() {
		return keyword;
	}


	public String getFlag() {
		return flag;
	}


	public int getSmallClassNo() {
		return smallClassNo;
	}


	@Override
	public String toString() {
		return "PagingBean [nowPage=" + nowPage + ", contentNumberPerPage="
				+ contentNumberPerPage + ", pageNumberPerPageGroup="
				+ pageNumberPerPageGroup + ", totalContents=" + totalContents
				+ ", keyword=" + keyword + ", flag=" + flag + ", smallClassNo="
				+ smallClassNo + "]";
	}	
	
	
	
	
	
	
	
}
